import Vuex from 'vuex'
import Vue from 'vue'
import axios from 'axios'

Vue.use(Vuex)
const store = new Vuex.Store({
    state: {
        count: 0,
        name: '张晓绘',
        gender: '男',
        countPlus: 0,
        list:[]
    },
    // 同步函数都写在mutations中
    mutations: {
        //  [SOME_MUTATION](state,val){
        //     //  传的其余参数为值
        //     state.count+=val
        //      //  传的其余参数为对象
        //     // state.count+=val.amount
        //  }
       incrementBy(state,val) {
                //  传的其余参数为值
            // state.count=state.count+val
                 //  传的其余参数为对象
                state.count+=val.amount
            //  }
            //  Mutation 必须是同步函数
            //  someMutation (state) {
            //     incrementBy(() => {
            //       state.count++
            //     })
            //   }
            //  loc(state){
            //     countPlus=state.count + this.localCount
            //  }
        },
        setUserData(state,arr){
            state.list = arr
        }
    },
    // 异步函数都写在actions中 Action 提交的是 mutation，而不是直接变更状态。Action 可以包含任意异步操作。
    actions:{
// Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象，因此你可以调用 context.commit 提交一个 mutation
        incrementBy2(context,n){
             context.commit('incrementBy',n)
        },
        incrementAsync ({ commit },m) {
            setTimeout(() => {
              commit('incrementBy',m)
            }, 1000)
        },
        getUserData({commit,dispatch}){
            axios.get('http://localhost/api.php/book?transform=1')
            .then( res =>{
               if(res.data.book.length>0){
                //    触发上面定义过的同步函数
                    commit('setUserData',res.data.book);
                    // 触发另一个异步函数 Action 通过 store.dispatch 方法触发：
                    dispatch('getAuth')
               }
            })
            .catch( err =>{

            })

        },
        // 另一个异步函数
        getAuth(){
            console.log(1)
        }
    }


})
export default store 